package edu.java8;

import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

/**
 * lambda表达式：
 *  (形参列表)->{执行体}   自动和函数式接口中的抽象方法做适配
 *    注意：
 *      形参列表一般不写参数类型
 *      参数只有一个时，()可以省略不写
 *      -> lambda标志
 *      执行体只有一句时，{}可以省略不写
 *      return在执行体直接返回数据时，可以省略
 */
public class LambdaDemo {

    public static void main(String[] args) {
//        test();
        test2((a, b) -> {
                    System.out.println("执行++++++++" + a);
                    return a + b;
                }
        );
    }

    static void test() {
        List<Integer> list = Arrays.asList(100, 90, 89, 78, 56, 28, 91);
        list.forEach(new Consumer<Integer>() {
            //accept方法中的形参代表的就是集合中的元素
            @Override
            public void accept(Integer i) {
                System.out.println(i);
            }
        });
        //利用lambda 进行简化操作   针对  函数式接口
        list.forEach(i ->
                System.out.println(i)
        );

    }

    static void test3(){
        List<Integer> list = Arrays.asList(100, 90, 89, 78, 56, 28, 91);
        //利用lambda表达式简化排序逻辑
        list.sort((o1, o2) -> o1.compareTo(o2));
        //::  方法的引用  java8新特性
        list.sort(Integer::compareTo);
    }

    static void test2(A a) {
        a.testLambda(10,20);
    }


}

@FunctionalInterface
interface A {
    int testLambda(int x, int y);
}
